
/* start /web-platform/scripts/web-platform/shop.core.js*/
SOE.Shop=function(config){this.config=config;this.config.sort=this.config.sort||'origPrice';this.products=[];if(!this.config.ajaxUrl){throw'Make sure `ajaxUrl` is set to a valid URAM URL when you instantiate the page.';}else if(!this.config.container){throw'Make sure `container` is set to a valid ID, or array of IDs when you instantiate the page.';}else if(!this.config.template){throw'Make sure `template` is set to a valid ID, array of IDs, or Underscore template function when you instantiate the page.';}};SOE.Shop.prototype.init=function(){SOE.Shop.currency=wpCookie('shop-currency')||'USD';this.symbolMap={USD:{symbol:'\u0024',method:'currencyFront'},AUD:{symbol:'A\u0024',method:'currencyFront'},DKK:{symbol:'kr',method:'currencyBack'},EUR:{symbol:'\u20AC',method:'currencyFront'},GBP:{symbol:'\u00A3',method:'currencyFront'},NOK:{symbol:'kr',method:'currencyBack'},SEK:{symbol:'kr',method:'currencyBack'},CHF:{symbol:'Fr',method:'currencyBack'},JPY:{symbol:'\u00A5',method:'currencyFront'},BRL:{symbol:'R\u0024',method:'currencyFront'},SOE:{symbol:'',method:'currencyFront'},CAD:{symbol:'CA\u0024',method:'currencyFront'},NZD:{symbol:'NZ\u0024',method:'currencyFront'}};if($('.currency.dropdown').length){this.setCurrency();}
this.loadUramData();};SOE.Shop.prototype.getUramData=function(){$.ajax({url:globs.urls.uramAjaxUrl+this.config.ajaxUrl+SOE.Shop.currency,dataType:'json',context:this,success:function(uramData){this.formatUramData(uramData[this.config.objName]);}});};SOE.Shop.prototype.shopAjax=function(url){var _this=this;return $.ajax({url:url,dataType:'json',context:_this}).done(function(result,signature){return(signature==='success')?result:{error:'shop request failed'};})};SOE.Shop.prototype.loadUramData=function(){var _this=this;var result=0;var signature=1;var requests=[];if(SOE.Shop.currency!=='USD'){requests=[_this.shopAjax(globs.urls.uramAjaxUrl+_this.config.ajaxUrl.replace(/locale=[a-zA-Z_]{5}/,'locale=en_US')+'USD'),_this.shopAjax(globs.urls.uramAjaxUrl+_this.config.ajaxUrl+SOE.Shop.currency)];}else{requests=[_this.shopAjax(globs.urls.uramAjaxUrl+_this.config.ajaxUrl+SOE.Shop.currency)];}
$.when.apply($,requests).then(function(usdReq,usersCurrencyReq){if(typeof usersCurrencyReq!=='undefined'&&Array.isArray(usersCurrencyReq)){if(usdReq[signature]==='success'&&usersCurrencyReq[signature]==='success'){if(_this.config.objName==='products'){for(var item in usersCurrencyReq[result][_this.config.objName]){if(usdReq[result].errors.length===0){usersCurrencyReq[result][_this.config.objName][item]['productoptions'][0].usDollarAmount=usdReq[result][_this.config.objName][item]['productoptions'][0].price.split('.')[0].replace(/[^0-9]+/g,'');}else{usersCurrencyReq[result][_this.config.objName][item]['productoptions'][0].usDollarAmount=0;}}}
if(_this.config.objName==='stationcashproducts'){for(var index in usersCurrencyReq[result][_this.config.objName]){if(usdReq[result].errors.length===0){usersCurrencyReq[result][_this.config.objName][index].usDollarAmount=usdReq[result][_this.config.objName][index].price.formattedPrice.split('.')[0].replace(/[^0-9]+/g,'');}else{usersCurrencyReq[result][_this.config.objName][index].usDollarAmount=0;}}}
_this.formatUramData(usersCurrencyReq[result][_this.config.objName]);}}else{if(usdReq){if(_this.config.objName==='products'){for(var item in usdReq[_this.config.objName]){usdReq[_this.config.objName][item]['productoptions'][0].usDollarAmount=usdReq[_this.config.objName][item]['productoptions'][0].price.split('.')[0].replace(/[^0-9]+/g,'');}}
if(_this.config.objName==='stationcashproducts'){for(var index in usdReq[_this.config.objName]){usdReq[_this.config.objName][index].usDollarAmount=usdReq[_this.config.objName][index].price.formattedPrice.split('.')[0].replace(/[^0-9]+/g,'');}}
_this.formatUramData(usdReq[_this.config.objName]);}}},function(err){console.log('ERROR',err);})}
SOE.Shop.prototype.getNumber=function(num){return num.replace(/[^\d\.]+/g,'');};SOE.Shop.prototype.setCurrency=function(){var _this=this;$('.currency.dropdown').on('click','a',function(evt){SOE.Shop.currency=evt.target.dataset.currency;_this.loadUramData();$('#currency-text, .currency.dropdown .currency-text').html(currencyMap[SOE.Shop.currency]);if(SOE.Shop.currency!=='SOE'){wpCookie('shop-currency',SOE.Shop.currency,30);}});$('#currency-text, .currency.dropdown .currency-text').html(currencyMap[SOE.Shop.currency]);};SOE.Shop.prototype.currencyFront=function(price){return price;};SOE.Shop.prototype.currencyBack=function(price){return price;};SOE.Shop.prototype.sortProducts=function(){var that=this;if(this.config.sort&&typeof this.config.sort==='function'){this.products.sort(this.config.sort);}else if(this.config.sort&&typeof this.config.sort!=='object'){this.products.sort(function(a,b){return that.getNumber(a[that.config.sort])-that.getNumber(b[that.config.sort]);});}else{this.products.sort(function(a,b){return that.config.sort.sortArray.indexOf(a[that.config.sort.sortProperty])-that.config.sort.sortArray.indexOf(b[that.config.sort.sortProperty]);});}};SOE.Shop.prototype.formatUramData=function(uramProducts){var counter=0;for(var k=0;k<uramProducts.length;k++){var currProduct=uramProducts[k];if((!this.config.blacklist||!_.contains(this.config.blacklist.list,currProduct[this.config.blacklist.propertyName]))&&(!this.config.whitelist||_.contains(this.config.whitelist.list,currProduct[this.config.whitelist.propertyName]))){this.reMapProductData(counter++,currProduct);}}
this.sortProducts();this.renderProducts();this.products=[];};SOE.Shop.prototype.renderProducts=function(){var template;var container=this.config.container;if(Array.isArray(this.config.container)){for(var k=0;k<this.config.container.length;k++){if(Array.isArray(this.config.template)&&this.config.template.length==this.config.container.length){if(typeof this.config.template[k]==='function'){template=this.config.template[k]({products:this.products});}else{template=_.template($(this.config.template[k]).html(),{products:this.products});}}else{template=_.template($(this.config.template).html(),{products:this.products});}
$('.spinner').fadeOut();$(container[k]).html(template);}}else{if(Array.isArray(this.config.template)){for(var arr=0;arr<this.config.template.length;arr++){if(typeof this.config.template[arr]==='function'){template+=this.config.template[arr]({products:this.products});}else{template+=_.template($(this.config.template[arr]).html(),{products:this.products});}}}else if(typeof this.config.template==='function'){template=this.config.template({products:this.products});}else{template=_.template($(this.config.template).html(),{products:this.products});}
$('.spinner').fadeOut();$(container).html(template);}
if(this.config.callback){this.config.callback();}};

/* end /web-platform/scripts/web-platform/shop.core.js*/

/* start /web-platform/scripts/web-platform/helpers/responsive-image-modal.js*/
window.DGC=window.DGC||{};window.DGC.ResponsiveImageModal=function(options){'use strict';var _options=_.extend({linkSelector:undefined,modalSelector:undefined,imageSelector:undefined,closeSelector:undefined,closeButtonWidth:undefined,closeButtonHeight:undefined,closeButtonMargin:15,headerHeight:0,headerWidth:0},options);var imageWidth=undefined,imageHeight=undefined,imageAspect=undefined;function layoutThumbModal(){if(!imageAspect){return;}
var windowHeight=window.innerHeight;var windowWidth=window.innerWidth;var windowClearanceHorizontal=windowWidth-_options.headerWidth;var windowClearanceVertical=windowHeight-_options.headerHeight;var windowClearanceAspect=windowClearanceHorizontal/windowClearanceVertical;var imageScale;if(windowClearanceAspect>imageAspect){$(_options.imageSelector).addClass('constrain-height').removeClass('constrain-width');imageScale=Math.min(windowHeight/imageHeight,1);}else{$(_options.imageSelector).addClass('constrain-width').removeClass('constrain-height');imageScale=Math.min(windowWidth/imageWidth,1);}
var resultImageWidth=imageWidth*imageScale;var closeButtonClearanceHorizontal=(_options.closeButtonWidth+_options.closeButtonMargin)*2;var resultImageHeight=imageHeight*imageScale;var closeButtonClearanceVertical=(_options.closeButtonHeight+_options.closeButtonMargin)*2;$(_options.closeSelector).toggleClass('space-beside',windowWidth>=resultImageWidth+closeButtonClearanceHorizontal).toggleClass('space-above',windowHeight>=resultImageHeight+closeButtonClearanceVertical);}
var thumbModalUpdater=new DebouncedUpdater({callbacks:[layoutThumbModal],doInitialUpdate:false});$(window).on('resize',thumbModalUpdater.doUpdate.bind(thumbModalUpdater));$(_options.modalSelector).on('hidden.bs.modal',function(){imageWidth=imageHeight=imageAspect=undefined;});$(document).on('update.responsiveImageModal',function(e,href){var imageSizeTest=new Image();imageSizeTest.addEventListener('load',function(){imageWidth=this.width;imageHeight=this.height;imageAspect=imageWidth/imageHeight;$(_options.imageSelector).attr('src',href);thumbModalUpdater.doUpdate();});imageSizeTest.src=href;});$(document).on('click',_options.linkSelector,function(e){e.preventDefault();var largeImage=this.getAttribute('href');var imageSizeTest=new Image();imageSizeTest.addEventListener('load',function(){imageWidth=this.width;imageHeight=this.height;imageAspect=imageWidth/imageHeight;$(_options.imageSelector).attr('src',largeImage);thumbModalUpdater.doUpdate();$(_options.modalSelector).modal();});imageSizeTest.src=largeImage;});};

/* end /web-platform/scripts/web-platform/helpers/responsive-image-modal.js*/

/* start /scripts/ssg/_components/shop.js*/
$(document).ready(function(){'use strict';let $screenshotGroup;window.SSG=window.SSG||{};const currenciesByLocale={en:'USD',en_US:'USD',en_GB:'GBP',en_CA:'CAD',en_NZ:'NZD',fr:'EUR',fr_FR:'EUR',de:'EUR',de_DE:'EUR'};function setCurrencyBySiteLocale(){wpCookie('shop-currency',currenciesByLocale[globs.soelocale]||'USD');}
function setCurrencyByBrowserLocale(){const existingCurrency=wpCookie('shop-currency');if(!window.currencyMap||!window.currencyMap[existingCurrency]){wpCookie('shop-currency',currenciesByLocale[navigator.language.replace('-','_')]||'USD');}}
window.SSG.setCurrency=function(){if(document.getElementById('siteLanguageMenu')){setCurrencyBySiteLocale();}else{setCurrencyByBrowserLocale();}};window.SSG.siteText=function(id){return window.SSG.siteStrings[id]||id;};window.SSG.localizedText=function(path){const currency=wpCookie('shop-currency');return lodash.get(this.strings,`${ path }.${ globs.soelocale }.${ currency }`)||lodash.get(this.strings,[path,globs.soelocale,currency])||lodash.get(this.strings,`${ path }.${ globs.soelocale }`)||lodash.get(this.strings,[path,globs.soelocale])||lodash.get(this.strings,`${ path }.en_US`+`.${ currency }`)||lodash.get(this.strings,[path,'en_US',currency])||lodash.get(this.strings,`${ path }.en_US`)||lodash.get(this.strings,[path,'en_US'])||window.SSG.siteText(path);};window.SSG.applyStringsVariant=function(strings,variant){if(Object.hasOwn(strings,variant)){return strings[variant];}else{const result={};for(const prop in strings){if(Object.hasOwn(strings,prop)){if(typeof strings[prop]==='object'&&!Array.isArray(strings[prop])){result[prop]=window.SSG.applyStringsVariant(strings[prop],variant);}else{result[prop]=strings[prop];}}}
return result;}};window.SSG.wrapDecimals=function(price,tag){const wrapTag=tag||'sup';return price.replace(/(\d+[.,])(\d+)/gi,`$1<${ wrapTag }>$2</${ wrapTag }>`);};window.SSG.valueIsSku=function(sku){return function(obj){return obj.value.sku===sku;};};window.SSG.discountAmount=function(product){if(product.promotional&&product.price!==product.originalPrice){const priceNum=SOE.Shop.prototype.getNumber(product.price);const origPriceNum=SOE.Shop.prototype.getNumber(product.originalPrice);return Math.max(0,Math.round(((origPriceNum-priceNum)/origPriceNum)*100));}else{return 0;}};window.SSG.ordinalSort=function(productA,productB){if(productA.ordinal!==undefined&&productB.ordinal!==undefined){return productA.ordinal-productB.ordinal;}else if(productA.ordinal!==undefined){return-1;}else if(productB.ordinal!==undefined){return 1;}else{return SOE.Shop.prototype.getNumber(productB.price)-SOE.Shop.prototype.getNumber(productA.price);}};window.SSG.pickLocalized=function(list){if(list){const allValidItems=list.filter(function(item){return Boolean(item.value);});const matchingLocaleItems=allValidItems.filter(function(item){return item.value.locale===globs.soelocale;});const englishItems=allValidItems.filter(function(item){return item.value.locale==='en_US';});let result;if(matchingLocaleItems.length>0){result=matchingLocaleItems.slice(0,1);}else if(englishItems.length>0){result=englishItems.slice(0,1);}else{result=allValidItems.slice(0,1);}
if(result.length>0){return result[0].value;}}};$(document).on('click','.screenshot-link',function(){const $parent=$(this).closest('.screenshot-group');$screenshotGroup=$parent.find('.screenshot-link');$('#screenshotModalCurrent').text($screenshotGroup.index(this)+1);$('#screenshotModalTotal').text($screenshotGroup.length);});function navigateScreenshots(direction){let screenshotIndex=parseInt($('#screenshotModalCurrent').text(),10)-1;screenshotIndex+=direction==='prev'?-1:1;if(screenshotIndex<0){screenshotIndex=$screenshotGroup.length-1;}else if(screenshotIndex>=$screenshotGroup.length){screenshotIndex=0;}
$('#screenshotModalCurrent').text(screenshotIndex+1);$(document).trigger('update.responsiveImageModal',$screenshotGroup.get(screenshotIndex).getAttribute('href'));}
$(document).on('keydown','#screenshotModal',function(e){if(e.key==='ArrowLeft'||e.key==='ArrowUp'){navigateScreenshots('prev');}else if(e.key==='ArrowRight'||e.key==='ArrowDown'){navigateScreenshots('next');}});$(document).on('click','#screenshotModal .screenshot-nav',function(){navigateScreenshots(this.getAttribute('data-direction'));});});

/* end /scripts/ssg/_components/shop.js*/

/* start /scripts/ssg/_pages/expansions.js*/
$(document).ready(function(){'use strict';const expansionGroupEditionCardTemplate=_.template($('#expansionGroupEditionCardTemplate').html(),null,{variable:'data'});const expansionGroupTemplate=_.template($('#expansionGroupTemplate').html(),null,{variable:'data'});const featuresListTemplate=_.template($('#featuresListTemplate').html(),null,{variable:'data'});const productBoxTemplate=_.template($('#productBoxTemplate').html(),null,{variable:'data'});const previousExpansionTemplate=_.template($('#previousExpansionTemplate').html(),null,{variable:'data'});const unrenderedProducts=new Map();DGC.ResponsiveImageModal({linkSelector:'.screenshot-link',modalSelector:'#screenshotModal',imageSelector:'#screenshotModalImage',closeSelector:'#screenshotModalHeader',closeButtonWidth:0,closeButtonHeight:0,closeButtonMargin:0,headerHeight:35});function maxHeightOfSelection($selection){return Math.max.apply(null,$selection.map(function(i,el){const rect=el.getBoundingClientRect();return rect?rect.height:0;}).get());}
function equalizeHeights($selection){$selection.removeAttr('style');if(window.innerWidth>=768){$selection.css('minHeight',`${ Math.ceil(maxHeightOfSelection($selection)) }px`);}}
function matchEditionSizes(){$('.group-edition-cards').each(function(){equalizeHeights($('.group-edition-card-features-list',$(this)));});}
const editionSizer=new DebouncedUpdater({callbacks:[matchEditionSizes],doInitialUpdate:false});$(window).on('resize',editionSizer.doUpdate.bind(editionSizer));function toggleGroupHeroConstraints(){if(window.innerWidth>=768){const acctMenuHeight=$('.acct-links').height();const navMenuHeight=$('.floating-nav').height();const availableSpace=window.innerHeight-(acctMenuHeight+navMenuHeight);const widthScale=window.innerWidth/1400;$('.group-hero-desktop').each(function(i,el){const imgNativeHeight=parseInt(el.getAttribute('data-native-height'),10);const imgCurrentHeight=imgNativeHeight*widthScale;$(el).toggleClass('constrain-y',imgCurrentHeight>availableSpace);});}}
const heroSizer=new DebouncedUpdater({callbacks:[toggleGroupHeroConstraints],doInitialUpdate:false});$(window).on('resize',heroSizer.doUpdate.bind(heroSizer));function tagNativeImageSize(i,el){const img=el.getAttribute('src');const imageSizeTest=new Image();imageSizeTest.addEventListener('load',function(){el.setAttribute('data-native-width',this.width);el.setAttribute('data-native-height',this.height);heroSizer.doUpdate();});imageSizeTest.src=img;}
function isProductGroup(product){return Boolean(product.value.editions);}
function hasProduct(edition){return Boolean(edition.product);}
function hasAnyProducts(){return this.editions.filter(hasProduct).length>0;}
function preprocessExpansionGroup(){this.editionsWithProducts=this.editions.filter(hasProduct);if(this.subtypeArray&&Array.isArray(this.subtypeArray)&&this.subtypeArray.indexOf('upgradable')>=0){const editionsByPrice=this.editionsWithProducts.slice().sort(function(a,b){return SOE.Shop.prototype.getNumber(a.product.price)-SOE.Shop.prototype.getNumber(b.product.price);});if(editionsByPrice.length>1){this.editionsWithProducts.forEach(function(e){e.upgradable=Boolean(e.sku!==editionsByPrice[0].sku);});}}}
function findEdition(sku){if(sku.indexOf('-ULT')>=0){return'ultimate';}else if(sku.indexOf('-COL')>=0){return'collectors';}else if(sku.indexOf('-STA')>=0){return'standard';}}
function findUnrenderedProduct(sku){return unrenderedProducts.get(sku);}
SSG.expansionGroups=SSG.productData.filter(isProductGroup).map(function(expansionGroup){return _.extend(expansionGroup,{value:_.extend(expansionGroup.value,{id:expansionGroup.value.name.toLowerCase().replace(/[^a-z]/g,'-').replace(/-{2,}/g,'-'),text:SSG.localizedText,ellipsis:SOE.Utils.ellipsisAtBreak,wrapDecimals:SSG.wrapDecimals,hasAnyProducts:hasAnyProducts,preprocess:preprocessExpansionGroup,hero:SSG.pickLocalized(expansionGroup.value.hero),editions:(expansionGroup.value.editions||[]).map(function(sku){const pieces=sku.value.split(':');return{id:pieces[0].trim(),sku:pieces[1].trim(),isHighlight:expansionGroup.value.highlight===pieces[0].trim(),cardTemplate:expansionGroupEditionCardTemplate};})})});});try{SSG.setCurrency();const shop=new SOE.Shop({ajaxUrl:`/rest/commerce/11/products.action?title=${ globs.wdl.gameCode }&filter=DLC&locale=${ globs.soelocale }&responseType=json&currency=`,objName:'products',container:['#expansionGroupContents','#previousExpansionContents'],template:[expansionGroupTemplate,previousExpansionTemplate],sort:SSG.ordinalSort,callback:function(){$('.group-hero-desktop').each(tagNativeImageSize);DGC.EnableParallax();$('body').attr('data-currency',wpCookie('shop-currency')||'USD');editionSizer.doUpdate();window.setTimeout(editionSizer.doUpdate.bind(editionSizer),1000);if(window.location.hash&&window.location.hash.trim().length>0){window.setTimeout(DGC.ScrollTo.scrollTo.bind(DGC.ScrollTo,window.location.hash),250);}}});shop.reMapProductData=function(idx,product){if(!product.productoptions||product.productoptions.length<=0){return;}
const origPrice=this[this.symbolMap[SOE.Shop.currency].method](product.productoptions[0].originalPrice);const price=this[this.symbolMap[SOE.Shop.currency].method](product.productoptions[0].price);const discount=window.SSG.discountAmount(product.productoptions[0]);const baseProduct=lodash.merge({},product.productoptions[0],{origPrice:origPrice,price:price,discount:discount,isOnSale:product.productoptions[0].promotional===true&&typeof discount==='number'&&discount>0,purchaseUrl:`/goto?type=afterReg&targetUrlKey=dlcBuyDLCWithSkuAndMOPEntryPoint&theme=${ globs.wdl.theme }&locale=${ globs.soelocale }&currency=${ SOE.Shop.currency }&selectedSku=${ product.productoptions[0].fullsku }&service=`,text:SSG.localizedText,ellipsis:SOE.Utils.ellipsisAtBreak,wrapDecimals:SSG.wrapDecimals,findUnrenderedProduct:findUnrenderedProduct,ga4Currency:SOE.Shop.currency,ga4Value:price.replace(/[^0-9.,]/gi,'').replace(/,/gi,'.'),ga4Item:{item_id:product.productoptions[0].fullsku}});SSG.productData.filter(isProductGroup).forEach(function(group){group.value.editions.forEach(function(edition){if(edition.sku===baseProduct.fullsku){edition.product=baseProduct;edition.product.ga4Item.item_name=`${ group.value.name } ${ group.value.strings?.editions[edition.id]?.title?.en_US }`;}});});const prevExpansion=SSG.productData.filter(SSG.valueIsSku(baseProduct.fullsku));if(prevExpansion&&prevExpansion.length>0){const mergedProduct=lodash.merge({},baseProduct,prevExpansion[0].value,{ordinal:prevExpansion[0].ordinal,upgradable:prevExpansion[0].value.subtypeArray.indexOf('upgradable')>=0,thumbnail:window.SSG.pickLocalized(prevExpansion[0].value.thumbnails)||prevExpansion[0].value.thumbnail,edition:findEdition(baseProduct.fullsku),featuresListTemplate:featuresListTemplate,productBoxTemplate:productBoxTemplate});mergedProduct.ga4Item.item_name=mergedProduct.strings?.title.en_US;this.products.push(mergedProduct);}else{unrenderedProducts.set(baseProduct.fullsku,baseProduct);}};shop.init();}catch(error){console.error(error);}});

/* end /scripts/ssg/_pages/expansions.js*/

/* start /web-platform/scripts/web-platform/component/media-modal.js*/
window.SOE=window.SOE||{};window.SOE.MediaModal=(function(){'use strict';var YOUTUBE_FAILURE_RETRY_COUNT=3;var _numDots=5;var _dotBarAutosizeSettings=null;var _numVideoThumbs=6;var _didInit=false;var _youTubeInitStarted=false;var _youTubeInitFinished=false;var _downloadListFunc=null;var _filterFunc=null;var _originalUrl=null;var _imageInfo=null;var _youTubeVideos=null;function _updateDotPos(idx){var $allDots=$('#dotOverflowContainer .dot');var $visibleDots=$allDots.filter(':not(.filtered)');var pageIdx=Math.floor($visibleDots.index($allDots.eq(idx))/_numDots);$allDots.removeClass('active').eq(idx).addClass('active');$('#dotOverflowContainer').stop().animate({left:pageIdx* -$('#paginationDotContainer').width()},function(){$('.modalControl').removeClass('disabled');});_updateDownloadList(idx);_updatePermalink(idx);}
function _updateDownloadList(dotIdx){if(_downloadListFunc){_downloadListFunc(_imageInfo[dotIdx].userId,$('#mediaModalDownload ul').empty());}}
function _updatePermalink(dotIdx){if(_originalUrl&&window.history.replaceState){window.history.replaceState(null,document.title,_imageInfo[dotIdx].permalinkUrl);}}
function _autosizeDotBar(){if(_dotBarAutosizeSettings){var windowWidth=window.innerWidth||document.documentElement.clientWidth;var totalDots=parseInt($('#mediaModalHeader .mediaTotal').text(),10);var widestPossibleContainer=Math.floor((windowWidth*_dotBarAutosizeSettings.maxWidth)/_dotBarAutosizeSettings.dotWidth)*_dotBarAutosizeSettings.dotWidth;var allDotsWidth=totalDots*_dotBarAutosizeSettings.dotWidth;var finalDotBarWidth=Math.min(widestPossibleContainer,allDotsWidth);var visibleDots=(finalDotBarWidth/_dotBarAutosizeSettings.dotWidth);var allDotsVisible=(visibleDots>=totalDots);$('#media-modal .pagNavBtn').toggleClass('hidden',allDotsVisible);$('#paginationDotContainer').width(finalDotBarWidth);setDotCount(visibleDots);}}
function _init(){if(_didInit){return;}
_didInit=true;$('#media-modal').on('soe.updateDot',function(evt,dot){var $allDots=$('#dotOverflowContainer .dot');var $visibleDots=$allDots.filter(':not(.filtered)');$('#media-modal-image').attr('src',_imageInfo[dot].imageUrl);$('#mediaModalHeader .mediaNum').text($visibleDots.index($allDots.eq(dot))+1);_updateDotPos(dot);});$('#media-modal').on('soe.arrowClick',function(evt,dir){var $allDots=$('#dotOverflowContainer .dot');var $visibleDots=$allDots.filter(':not(.filtered)');var selectedVisibleDot=$visibleDots.index($allDots.filter('.active'))+1;var selectedDot;if(dir==='next'){if(selectedVisibleDot<$visibleDots.length){selectedVisibleDot++;}else{selectedVisibleDot=1;}}else if(selectedVisibleDot>1){selectedVisibleDot--;}else{selectedVisibleDot=$visibleDots.length;}
selectedDot=$allDots.index($visibleDots.eq(selectedVisibleDot-1));$('#media-modal-image').attr('src',_imageInfo[selectedDot].imageUrl);$('#mediaModalHeader .mediaNum').text(selectedVisibleDot);_updateDotPos(selectedDot);});$('#media-modal').on('click','.pagDot',function(){var idx=$('#dotOverflowContainer .pagDot').index(this);$('#media-modal').trigger('soe.updateDot',idx);});$('#media-modal').keydown(function(key){if(key.which===37){$('#media-modal').trigger('soe.arrowClick','prev');}else if(key.which===39){$('#media-modal').trigger('soe.arrowClick','next');}});$('.modalTraverse').on('click',function(){$('#media-modal').trigger('soe.arrowClick',this.getAttribute('rel'));});$('#media-modal').on('mouseenter','.pagDot',function(){var $this=$(this);var idx=$('#dotOverflowContainer .pagDot').index($this);var dotWidth=parseInt($this.outerWidth(true),10)/2;var dotLeft=$this.offset().left;var tooltip=$('#paginationImages');if(!tooltip.hasClass('hidden')){var tooltipWidth=parseInt(tooltip.outerWidth(),10)/2;tooltip.stop().animate({left:(dotLeft+dotWidth)-tooltipWidth},'fast');$('#paginationImgSlider').stop().animate({left:idx* -parseInt(tooltip.width(),10)},'fast');tooltip.show();}});$('#media-modal').on('mouseleave','.pagDot',function(){$('#paginationImages').hide();});$('.pagNavBtn').on('click',function(){var dotContainer=$('#dotOverflowContainer');var pageContainer=$('#paginationDotContainer');var pageWidth=pageContainer.width();var pages=Math.ceil(dotContainer.find('.dot:not(.filtered)').length/_numDots);var nextShift;var maxContainerShift=((pages-1)* -pageWidth);if(this.getAttribute('rel')==='next'){nextShift=parseInt(dotContainer.css('left'),10)-pageWidth;if(nextShift<maxContainerShift){dotContainer.stop().animate({left:0});}else{dotContainer.stop().animate({left:nextShift});}}else{nextShift=parseInt(dotContainer.css('left'),10)+pageWidth;if(nextShift>0){dotContainer.stop().animate({left:maxContainerShift});}else{dotContainer.stop().animate({left:nextShift});}}});$('#mediaModalFilter').on('click','.dropdown-menu a',function(e){e.preventDefault();if(_filterFunc){var $allDots,$visibleDots;var filterId=this.getAttribute('data-filter-id');$('#dotOverflowContainer .dot').each(function(dotIdx){$(this).toggleClass('filtered',!_filterFunc(_imageInfo[dotIdx].userId,filterId));});$allDots=$('#dotOverflowContainer .dot');$visibleDots=$allDots.filter(':not(.filtered)');$('#mediaModalHeader .mediaTotal').text($visibleDots.length);_autosizeDotBar();$('#media-modal').trigger('soe.updateDot',$allDots.index($visibleDots.eq(0)));}});$(document).on('hide.bs.modal','#media-modal.image-content',function(){if(_originalUrl&&window.history.replaceState){window.history.replaceState(null,document.title,_originalUrl);}
$(window).off('.mediaModal');_downloadListFunc=null;_filterFunc=null;_originalUrl=null;_imageInfo=null;});}
function _initYouTube(readyFn){var youTubePlayer;if(_youTubeInitFinished){if(readyFn){readyFn();}
return;}
if(readyFn){$(document).on('onYouTubeIframeAPIReady',function(){readyFn();});}
if(_youTubeInitStarted){return;}
_youTubeInitStarted=true;$(document).on('show.bs.modal','#media-modal.video-content',function(){if($('#media-modal .modal-video-playlist ul').is(':empty')){youTubePlayer=new YT.Player($('#media-modal .modal-video-replace').get(0),{width:'100%',height:'100%',host:'https://www.youtube-nocookie.com',playerVars:{autoplay:1,theme:'dark',color:'black',rel:0,wmode:'opaque'},videoId:$(this).data('youtube-video-id'),events:{onReady:videoReady,onStateChange:videoStateChange,onError:videoError}});}else{startPlaylist();}});function videoReady(e){$(document).trigger('onYouTubeReady',e);}
function videoStateChange(e){$(document).trigger('onYouTubeStateChange',e);}
function videoError(e){$(document).trigger('onYouTubeError',e);}
function startPlaylist(){youTubePlayer=new YT.Player($('#media-modal .modal-video-replace').get(0),{host:'https://www.youtube-nocookie.com',playerVars:{autoplay:1,theme:'dark',color:'black',rel:0,wmode:'opaque'},events:{onReady:playlistReady,onStateChange:playlistStateChange,onError:playlistError}});}
function playlistReady(e){var playlist=_.pluck(_youTubeVideos,'id');var startVideo=$('#media-modal.video-content').data('youtube-video-id');$('#media-modal .modal-video-playlist').data('youtube-fail-count',0);youTubePlayer.loadPlaylist(playlist.join(','),playlist.indexOf(startVideo));$(document).trigger('onYouTubeReady',e);}
function playlistStateChange(e){var currentVideoIndex;if(e.data===YT.PlayerState.PLAYING){currentVideoIndex=youTubePlayer.getPlaylistIndex();$('#media-modal .modal-video-playlist a').removeClass('now-playing').eq(currentVideoIndex).addClass('now-playing');$('#media-modal .modal-video-details .title').text(_youTubeVideos[currentVideoIndex].title);$('#media-modal .modal-video-details .username').attr('href','https://www.youtube.com/channel/'+_youTubeVideos[currentVideoIndex].channelId).text(_youTubeVideos[currentVideoIndex].username);$('#media-modal .modal-video-details .date').text(_youTubeVideos[currentVideoIndex].timestamp.toDateString());showPlaylistPage(Math.floor(currentVideoIndex/_numVideoThumbs));}
$(document).trigger('onYouTubeStateChange',e);}
function playlistError(e){var failureCount;if(e.data===5){failureCount=$('#media-modal .modal-video-playlist').data('youtube-fail-count');if(failureCount<YOUTUBE_FAILURE_RETRY_COUNT){youTubePlayer.stopVideo();$('#media-modal .modal-video-replace').after('<div class="modal-video-replace"></div>').remove();$('#media-modal .modal-video-playlist').data('youtube-fail-count',failureCount+1);$('#media-modal').data('youtube-video-id',_youTubeVideos[youTubePlayer.getPlaylistIndex()].id);startPlaylist();}}
$(document).trigger('onYouTubeError',e);}
function showPlaylistPage(page){$('#media-modal .modal-video-playlist ul').data('page',page).css('margin-left',(page* -100)+'%');}
function getPlaylistPage(){return $('#media-modal .modal-video-playlist ul').data('page');}
$(document).on('hide.bs.modal','#media-modal.video-content',function(){try{youTubePlayer.stopVideo();}catch(e){}
$('#media-modal .modal-video').empty();_youTubeVideos=null;});$(document).on('click','#media-modal.video-content .modal-video-playlist a',function(){var selectedIndex=$('#media-modal .modal-video-playlist a').index(this);youTubePlayer.playVideoAt(selectedIndex);});$(document).on('click','#media-modal.video-content .playlist-pag-prev, #media-modal.video-content .playlist-pag-next',function(){var newPage,currentPage=getPlaylistPage(),firstPage=0,lastPage=(Math.ceil(_youTubeVideos.length/_numVideoThumbs)-1);if($(this).hasClass('playlist-pag-prev')){newPage=currentPage<=firstPage?lastPage:(currentPage-1);}else{newPage=currentPage>=lastPage?firstPage:(currentPage+1);}
showPlaylistPage(newPage);});window.onYouTubeIframeAPIReady=function(e){_youTubeInitFinished=true;$(document).trigger('onYouTubeIframeAPIReady',e);};}
function setDotCount(numDots){if(numDots>0){_numDots=numDots;}}
function setAutosizeDotBar(options){if(options){var defaults={maxWidth:0.7,dotWidth:1};_dotBarAutosizeSettings=$.extend({},defaults,options);}else{_dotBarAutosizeSettings=null;}}
function setupGroup(options){var defaults={container:null,selector:'a',hidePaginationThumbs:false,permalinkAttribute:null,userIdAttribute:null};var _options=$.extend({},defaults,options);_init();$(_options.container).on('click',_options.selector,function(e){var i,imageInfo=[];var localOptions=$.extend({},_options);var $allItems=$(localOptions.container).find(localOptions.selector);for(i=0;i<$allItems.length;++i){imageInfo.push({imageUrl:$allItems[i].getAttribute('href'),thumbUrl:localOptions.hidePaginationThumbs?null:$allItems.eq(i).find('img').attr('src'),userId:localOptions.userIdAttribute?$allItems[i].getAttribute(localOptions.userIdAttribute):null,permalinkUrl:localOptions.permalinkAttribute?$allItems[i].getAttribute(localOptions.permalinkAttribute):null});}
localOptions.hasPermalinks=Boolean(localOptions.permalinkAttribute);localOptions.hasThumbs=!localOptions.hidePaginationThumbs;localOptions.imageInfo=imageInfo;localOptions.initialItem=$allItems.index(this);showGroup(localOptions);e.preventDefault();});}
function showGroup(options){var defaults={typeName:null,containY:false,centerY:false,hasThumbs:false,hasPermalinks:false,downloadListFunc:null,filterList:null,filterFunc:null,initialItem:0,imageInfo:[]};var i,dotContainerWidth,dotMarkup='',paginationMarkup='';var _options=$.extend({},defaults,options);var dotTemplate=$('#tpl-pagination-dot').html();var filterTemplate=_.template($('#tpl-media-filter-list-item').html());var hasDownloads=(typeof _options.downloadListFunc==='function');var hasFilters=Boolean((_options.filterList&&options.filterList.length>0&&typeof _options.filterFunc==='function'));_init();_imageInfo=_options.imageInfo;$('#mediaModalHeader .mediaType').text(_options.typeName);$('#mediaModalHeader .mediaNum').text(_options.initialItem+1);$('#mediaModalHeader .mediaTotal').text(_options.imageInfo.length);$('#media-modal-image').attr('src',_options.imageInfo[_options.initialItem].imageUrl);$('#mediaModalDownload').toggleClass('hidden',!hasDownloads);$('#mediaModalFilter').toggleClass('hidden',!hasFilters);$('#dotOverflowContainer').empty().width(9999999);$('#paginationImgSlider').empty();$('#paginationImages').toggleClass('hidden',!_options.hasThumbs);for(i=0;i<_options.imageInfo.length;++i){dotMarkup+=dotTemplate;if(_options.hasThumbs){paginationMarkup+='<img src="'+_options.imageInfo[i].thumbUrl+'"/>';}}
$('#dotOverflowContainer').append($(dotMarkup));$('#paginationImgSlider').width(9999999).append($(paginationMarkup));$('#dotOverflowContainer .dot').eq(_options.initialItem).addClass('active');if(_options.hasPermalinks){_originalUrl=window.location.href;_updatePermalink(_options.initialItem);}
if(hasDownloads){_downloadListFunc=_options.downloadListFunc;_updateDownloadList(_options.initialItem);}
if(hasFilters){_filterFunc=_options.filterFunc;$('#mediaModalFilter ul').empty();for(i=0;i<_options.filterList.length;++i){$('#mediaModalFilter ul').append($(filterTemplate({filterId:_options.filterList[i].id,filterTitle:_options.filterList[i].title})));}}
if(_dotBarAutosizeSettings){$(window).on('resize.mediaModal',_autosizeDotBar);_autosizeDotBar();}
dotContainerWidth=$('#paginationDotContainer').width();$('#dotOverflowContainer').css('left',(Math.ceil((_options.initialItem+1)/_numDots)-1)* -dotContainerWidth);$('#media-modal').removeClass().addClass('modal fade image-content');$('#media-modal').toggleClass('contain-y',_options.containY);$('#media-modal').toggleClass('center-y',_options.centerY);$('#media-modal').modal();}
function setupPoster(options){var defaults={container:null,selector:'a'};var _options=$.extend({},defaults,options);_init();$(_options.container).on('click',_options.selector,function(event){showPoster($.extend({},_options,{url:this.getAttribute('href')}));event.preventDefault();});}
function showPoster(options){var defaults={scroll:true,containY:false};var _options=$.extend({},defaults,options);_init();$('#media-modal-image').attr('src',_options.url);$('#media-modal').removeClass().addClass('modal fade image-content');$('#media-modal').toggleClass('full-scroll',_options.scroll);$('#media-modal').toggleClass('full-fixed',!_options.scroll);$('#media-modal').toggleClass('contain-y',_options.containY);$('#media-modal').modal();}
function setTrayThumbCount(thumbsPerPage){if(thumbsPerPage>0){_numVideoThumbs=thumbsPerPage;}}
function findYouTubeId(url){var idSniff=/(?:youtube\.com\/(?:[^/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?/ ]{11})/i;var matches=url.match(idSniff);if(matches&&matches.length>=2){return matches[1];}else{return null;}}
function setupYouTube(options){if(!globs.wdl.wdlCookDNT){_initYouTube(function(){var defaults={linkSelector:null,defaultVideoID:null};var _options=$.extend({},defaults,options);$(document).on('click',_options.linkSelector,function(event){var videoID;if($(window).width()>=768){event.preventDefault();videoID=findYouTubeId(this.getAttribute('href'))||_options.defaultVideoID;showYouTube({videoId:videoID});}});});}}
function showYouTube(options){if(!globs.wdl.wdlCookDNT){_initYouTube(function(){var defaults={videoId:null,videos:null};var i,playlistTemplate,playlistContents;var _options=$.extend({},defaults,options);var $modal=$('#media-modal');$modal.data('youtube-video-id',_options.videoId);$modal.find('.modal-video').html($('#tpl-youtube-video-default-markup').html());if(_options.videos&&_options.videos.length>0){playlistTemplate=_.template($('#tpl-youtube-playlist-item').html());playlistContents='';for(i=0;i<_options.videos.length;++i){playlistContents+=playlistTemplate(_options.videos[i]);}
_youTubeVideos=_options.videos;$modal.find('.modal-video-playlist ul').html(playlistContents).data('page',0);$modal.find('.modal-video-playlist .playlist-count').text(_options.videos.length);$modal.removeClass().addClass('modal fade video-content playlist');$modal.modal();}else{$modal.removeClass().addClass('modal fade video-content');$modal.modal();}});}}
function isReady(){return _youTubeInitFinished;}
return{setDotCount:setDotCount,setAutosizeDotBar:setAutosizeDotBar,setupGroup:setupGroup,showGroup:showGroup,setTrayThumbCount:setTrayThumbCount,setupYouTube:setupYouTube,showYouTube:showYouTube,setupPoster:setupPoster,showPoster:showPoster,findYouTubeId:findYouTubeId,isReady:isReady};}());

/* end /web-platform/scripts/web-platform/component/media-modal.js*/
